#pragma once

#include <map>
#include <string>
#include <memory>
#include "protocol/transport.pb.h"
#include "network/reactor/Reactor.h"
#include "broker/server/BrokerMediator.h"
#include "server/service/PubService.h"
#include "server/service/SubService.h"
#include "server/service/OutSideService.h"
#include "server/service/AdminService.h"

namespace zeroplus::mq
{
    class RequestProcessor
    {
    private:
        Reactor reactor_;
        std::shared_ptr<BrokerMediator> mediator_;
        std::shared_ptr<PubService> publishService_;
        std::shared_ptr<SubService> subscribeService_;
        std::shared_ptr<OutsideService> outsideService_;
        std::shared_ptr<AdminService> adminService_;

    public:
        RequestProcessor();

        ~RequestProcessor();

        bool Start();

        bool Stop();
    };
}
